//
//  HomeTableViewController.swift
//  Weibo10
//
//  Created by 吕昱坪 on 15/12/6.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit
import SVProgressHUD

/// 原创微博 Cell 的可重用表示符号
 let StatusCellNormalId = "StatusCellNormalId"
 /// 转发微博的可重用
 let StatusCellRetweetedId = "StatusCellRetweetedId"

class HomeTableViewController: VisitorTableViewController {
  
 /// 微博数据列表模型
    private lazy var listViewModal = StatusListViewModel()

    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !UserAccountViewModel.sharedUserAccount.userLogon{
        
            visitorView?.setupInfo(nil, title:"关注一些人，回这里看看有什么惊喜")
            return
        }
        
        prepareTableView()
        loadData()
        
        //注册通知   通知中心对self是弱引用，不会修改到homeTableView的引用计数，对象才有可能会被释放
        //注意：如果使用通知中心的 block监听，其中的 self 一定要弱引用，否则通知中心不会被释放
        NSNotificationCenter.defaultCenter().addObserverForName(WBStatusSelectedPhotoNotification, object: nil,
            queue: nil) { [weak self](n) -> Void in
                
                guard let indexPath = n.userInfo?[WBStatusSelectedPhotoIndexPathKey] as? NSIndexPath  else {
                    return
                }
                
                guard let urls = n.userInfo?[WBStatusSelectedPhotoURLsKey] as? [NSURL] else {
                    return
                }
                //判断 cell 是否遵守了展现动画协议
                guard let cell = n.object as? PhotoBrowserPresentDelegate else {
                    return
                }
                
                let vc = PhotoBrowserViewController(urls: urls, IndexPath: indexPath)
                
                //1.设置modal的类型是自定义类型 Transition(转场)
                vc.modalPresentationStyle = UIModalPresentationStyle.Custom
                //2.设置动画代理
                vc.transitioningDelegate = self?.photoBrowserAnimator
                //3.设置 animator 的代理参数
                self?.photoBrowserAnimator.setDelegateParams(cell, indexPath: indexPath, dismissDelegate: vc)
                
                //modal 展现
                self?.presentViewController(vc, animated: true, completion: nil)
        }
    }
    
    deinit{
        
        //注销通知
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
    
/// 准备表格
private func prepareTableView() {
        // 注册可重用 cell
    tableView.registerClass(StatusNormalCell.self, forCellReuseIdentifier: StatusCellNormalId)
    tableView.registerClass(StatusRetweetedCell.self, forCellReuseIdentifier: StatusCellRetweetedId)
    
    //取消tabview的分隔线
    tableView.separatorStyle = .None
    
    //预估行高
    tableView.estimatedRowHeight = 400
    
    //下拉刷新控件 - 高度60
    refreshControl = WBRefreshControll()
    //添加监听方法
    refreshControl?.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
    
    //上拉刷新视图
    tableView.tableFooterView = pullupView
    
        }

/// 加载数据 通过消息调用@objc
@objc private func loadData() {

    //开始刷新
    refreshControl?.beginRefreshing()
    listViewModal.loadStatus(isPullup: pullupView.isAnimating()) { (isSuccessed) -> () in
        
        //关闭刷新控件
        self.refreshControl?.endRefreshing()
        //关闭上拉刷新
        self.pullupView.stopAnimating()
        
        if !isSuccessed {
            SVProgressHUD.showInfoWithStatus("加载数据错误，请稍后再试")
            return
        }

      // 刷新数据
        self.tableView.reloadData()
    }
    }
    
 //MARK:-懒加载控件
// MARK: - 上拉刷新提示视图
    private lazy var pullupView: UIActivityIndicatorView = {
        
        let indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        indicator.color = UIColor.lightGrayColor()
        
        return indicator
    }()
    /// 照片查看转场动画代理
    private lazy var photoBrowserAnimator: PhotoBrowserAnimator = PhotoBrowserAnimator()
}

//MARK: - 数据源方法
extension HomeTableViewController{
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
          return listViewModal.statusList.count
    }
    
    override func tableView(tableView: UITableView,
        cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
        //1.获取视图模型
            let vm = listViewModal.statusList[indexPath.row]
            
        //2.获取可重用cell会调用行高方法
            let cell = tableView.dequeueReusableCellWithIdentifier(vm.cellId,forIndexPath: indexPath) as! StatusCell
            
            //3.设置视图模型
            cell.viewModle = vm
            
            //4.判断是否是最后一条微博
            if indexPath.row == listViewModal.statusList.count - 1  && !pullupView.isAnimating() {
               
                //开始动画
                pullupView.startAnimating()
                
                //上拉刷新
                loadData()
            
                print("上拉刷新数据")
            }
            return cell
    }
       //tableView的行高一旦变化执行这个代理方法
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        
               return listViewModal.statusList[indexPath.row].rowHeight
    }
}




















